/**
 ******************************************************************************
 * @file           : bsp_24cxx.h
 * @brief          : AT24CXX EEPROM Driver Header File (STM32H7xx)
 ******************************************************************************
 * @attention
 *
 * AT24CXX系列EEPROM驱动程序头文件
 * 支持AT24C01~AT24C256系列芯片
 * 支持硬件I2C和软件I2C两种通信方式
 * 提供单字节和多字节读写接口
 *
 ******************************************************************************
 */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __BSP_24CXX_H
#define __BSP_24CXX_H

#ifdef __cplusplus
extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include <stdint.h>
#include <stdbool.h>

/* Exported types ------------------------------------------------------------*/

/**
 * @brief AT24CXX错误码枚举
 */
typedef enum
{
    AT24CXX_OK = 0,             /*!< 操作成功 */
    AT24CXX_ERROR = -1,         /*!< 操作失败（通用错误） */
    AT24CXX_ERROR_PARAM = -2,   /*!< 参数错误（NULL指针或无效参数） */
    AT24CXX_ERROR_ADDR = -3,    /*!< 地址越界 */
    AT24CXX_ERROR_I2C = -4,     /*!< I2C通信错误 */
    AT24CXX_ERROR_TIMEOUT = -5, /*!< 操作超时 */
    AT24CXX_ERROR_CHECK = -6,   /*!< 芯片检测失败 */
} AT24CXX_Error_e;

/* Exported constants --------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
/* Exported variables --------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/

/* 初始化函数 */
void at24cxx_init(void);                                                /* 初始化AT24CXX驱动 */
int8_t at24cxx_check(void);                                             /* 检测AT24CXX芯片 */

/* 读写函数 */
int8_t at24cxx_read_one_byte(uint16_t addr, uint8_t *data);             /* 读取单个字节 */
int8_t at24cxx_write_one_byte(uint16_t addr, uint8_t data);             /* 写入单个字节 */
int8_t at24cxx_read(uint16_t addr, uint8_t *pbuf, uint16_t len);        /* 读取多个字节 */
int8_t at24cxx_write(uint16_t addr, const uint8_t *pbuf, uint16_t len); /* 写入多个字节 */

/* 信息查询函数 */
const char* at24cxx_get_model_name(void);                               /* 获取型号名称 */
uint16_t at24cxx_get_capacity(void);                                    /* 获取容量（字节） */
uint8_t at24cxx_get_page_size(void);                                    /* 获取页大小（字节） */

#ifdef __cplusplus
}
#endif

#endif /* __BSP_24CXX_H */
